# -*- coding: utf-8 -*-

import allure
from common.page import Page
from common.utils import Utils
from dz_service.function.fun_common import Common
from dz_service.page_elements.el_home import home
from time import sleep
from dz_service.page_elements.el_private_fund import private_fund
from dz_service.function.fun_service_utils import ServiceUtils


class Privatefund:

    @staticmethod
    def submit_evidence():
        Page.click(private_fund, '私募合格投资者页面', '提交证明', is_els=True, num=0)

    @allure.step('step:作废网厅新中台、BOP业务流水')
    def initial_userinfo(self, client_id):
        ServiceUtils().initial_service_sql(client_id, '1063')
        ServiceUtils().initial_bop_sql(client_id, '5099')

    @allure.step('step:私募合格投资者权限开通-个人')
    def private_fund_open_person(self, trade_pic, assets1_pic, assets2_pic):
        trade_pic_path = Utils.get_test_pic(trade_pic)
        assets1_pic_path = Utils.get_test_pic(assets1_pic)
        assets2_pic_path = Utils.get_test_pic(assets2_pic)
        # 点击首页菜单--更多业务
        Page.click(home, '首页', '更多业务')
        # 选择私募合格投资者认定菜单
        Page.click(private_fund, '私募合格投资者页面', '私募合格投资者认定')
        assert Page.element(private_fund, "检查元素", "资料完整").text == "资料完整", "页面文字：资料完整 检验失败。"
        assert Page.element(private_fund, "检查元素", "风险测评未过期").text == "风险测评未过期", "页面文字：风险测评未过期 检验失败。"
        assert Page.element(private_fund, "检查元素", "证件日期未过期").text == "证件日期未过期", "页面文字：证件日期未过期 检验失败。"
        # 点击下一步
        Common().click_next()
        assert Page.element(private_fund, "检查元素", "私募合格投资者认定").text == "私募合格投资者认定", "页面文字：私募合格投资者认定 检验失败。"
        # 点击申请认定
        Page.click(private_fund, '私募合格投资者页面', '申请认定')
        assert len(Page.elements(private_fund, '检查元素', '已满足')) == 4
        # 点击下一步
        Common().click_next()
        assert Page.element(private_fund, "检查元素", "待验证").text == "待验证", "页面文字：待验证 检验失败。"
        # 前往上传
        Page.click(private_fund, '私募合格投资者页面', '前往上传')
        assert Page.element(private_fund, "检查元素", "请上传符合要求的资产证明的图片").text == "请上传符合要求的资产证明的图片"
        assert Page.element(private_fund, "检查元素", "请上传可用于证明您有2年以上投资经历的图片").text == "请上传可用于证明您有2年以上投资经历的图片"
        sleep(1)
        Page.send_key(private_fund, '私募合格投资者页面', '投资经验证明', trade_pic_path)
        Page.send_key(private_fund, '私募合格投资者页面', '资产收入证明1', assets1_pic_path)
        Page.send_key(private_fund, '私募合格投资者页面', '资产收入证明2', assets2_pic_path)
        self.submit_evidence()
        Page.check_page_loading(5)
        assert Page.element(private_fund, "检查元素", "提交成功").text == "提交成功", "页面文字：提交成功 检验失败。"
        Page.logger.info('提交成功。', extra={'appname': 'private_fund_open_person'})

    @allure.step('step:私募合格投资者权限开通-机构')
    def private_fund_open_organ(self, trade_pic, assets1_pic):
        trade_pic_path = Utils.get_test_pic(trade_pic)
        assets1_pic_path = Utils.get_test_pic(assets1_pic)
        # 点击首页菜单--更多业务
        Page.click(home, '首页', '更多业务')
        # 选择私募合格投资者认定菜单
        Page.click(private_fund, '私募合格投资者页面', '私募合格投资者认定')
        assert Page.element(private_fund, "检查元素", "资料完整").text == "资料完整", "页面文字：资料完整 检验失败。"
        assert Page.element(private_fund, "检查元素", "风险测评未过期").text == "风险测评未过期", "页面文字：风险测评未过期 检验失败。"
        assert Page.element(private_fund, "检查元素", "证件日期未过期").text == "证件日期未过期", "页面文字：证件日期未过期 检验失败。"
        # 点击下一步
        Common().click_next()
        assert Page.element(private_fund, "检查元素", "私募合格投资者认定").text == "私募合格投资者认定", "页面文字：私募合格投资者认定 检验失败。"
        # 点击申请认定
        Page.click(private_fund, '私募合格投资者页面', '申请认定')
        assert len(Page.elements(private_fund, '检查元素', '已满足')) == 3
        # 点击下一步
        Common().click_next()
        assert Page.element(private_fund, "检查元素",
                            "请上传符合要求的资产证明的图片").text == "请上传符合要求的资产证明的图片", "页面文字：请上传符合要求的资产证明的图片 检验失败。"
        sleep(1)
        Page.send_key(private_fund, '私募合格投资者页面', '投资经验证明', trade_pic_path)
        Page.send_key(private_fund, '私募合格投资者页面', '资产收入证明1', assets1_pic_path)
        self.submit_evidence()
        Page.check_page_loading(5)
        assert Page.element(private_fund, "检查元素", "提交成功").text == "提交成功", "页面文字：提交成功 检验失败。"
        Page.logger.info('提交成功。', extra={'appname': 'private_fund_open_organ'})
